package com.zenithmind.library.strategy;

import com.zenithmind.common.result.Result;
import com.zenithmind.library.enums.BookStatus;

/**
 * 图书状态处理策略接口
 * 遵循开闭原则：对扩展开放，对修改关闭
 * 
 * @author ZenithMind
 * @since 2024-06-14
 */
public interface BookStatusStrategy {

    /**
     * 支持的图书状态
     * 
     * @return 图书状态
     */
    BookStatus getSupportedStatus();

    /**
     * 处理状态变更
     * 
     * @param bookCopyId 图书副本ID
     * @param fromStatus 原状态
     * @param toStatus 目标状态
     * @return 处理结果
     */
    Result<Void> handleStatusChange(String bookCopyId, BookStatus fromStatus, BookStatus toStatus);

    /**
     * 验证状态变更是否合法
     * 
     * @param fromStatus 原状态
     * @param toStatus 目标状态
     * @return 是否合法
     */
    boolean isValidStatusChange(BookStatus fromStatus, BookStatus toStatus);

    /**
     * 获取状态描述
     * 
     * @return 状态描述
     */
    String getStatusDescription();
}
